package com.cheetah.start.common.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * knife 接口文档 配置
 *
 * @author Feel
 * @date 2021/08/18
 */
@Slf4j
@Configuration
@EnableOpenApi
public class SwaggerConfig {

    /**
     * 系统api 创建API应用 apiInfo() 增加API相关信息 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现，
     * 本例采用指定扫描的包路径来定义指定要建立API的目录。
     *
     * @return {@link Docket}
     */
    @Bean(value = "系统接口")
    public Docket systemApi() {
        //版本类型是swagger2
        return new Docket(DocumentationType.SWAGGER_2)
                //通过调用自定义方法apiInfo，获得文档的主要信息
                .apiInfo(apiInfo("Cheetah API", " 后 台 "))
                .groupName("系统接口")
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.cheetah.start.system"))
                .paths(PathSelectors.any())
                .build()
                .ignoredParameterTypes(HttpSession.class, HttpServletResponse.class, HttpServletRequest.class);
    }


    /**
     * 创建该API的基本信息（这些基本信息会展现在文档页面中） 访问地址：http://项目实际地址/swagger-ui.html
     *
     * @return
     */
    private ApiInfo apiInfo(String title, String desc) {
        return new ApiInfoBuilder()
                //接口管理文档首页显示
                .title(title)
                //API的描述
                .description(desc)

                //网站url等
                .termsOfServiceUrl("-----------")
                .version("1.0")
                .build();
    }
}
